package com.iatinspur.learn;

import com.iatinspur.MyClassLoader4Test;
import net.bytebuddy.jar.asm.ClassWriter;
import net.bytebuddy.jar.asm.Opcodes;

import java.io.IOException;

/**
 * 23集 讲解 方法区
 *
 *  类元信息  运行时常量池  字符串常量池
 *
 *  类元信息与运行时常量池应该是方法区里面
 *  字符串常量池在堆信息中
 *
 *
 *  jdk 7   永久代  ps_perm_gen   堆里面 内存空间有限
 *  jdk 8后  元空间  metaspace      操作系统中  操作系统内存只要有就能一直搞进去
 *  -XX:MaxMetaspacesize=值   设置后 就会有OutOfMemoryError: Metaspace
 *
 *  想搞方法区的内存溢出  要学习byteBuddy
 *
 */
public class Learn_20_JVM {
    public static void main(String[] args) throws IOException {
      //  System.in.read();
        MyClassLoader4Test classLoader = new MyClassLoader4Test();
        int count = 0;

        while(true){
            String name ="Class"+count;
            ClassWriter classWriter = new ClassWriter(0);
            classWriter.visit(Opcodes.V1_8,Opcodes.ACC_PUBLIC,name,null,"java/lang/Object",null);
            byte[] bytes = classWriter.toByteArray();
            classLoader.myDefineClass(name,bytes,0,bytes.length);
            System.out.println(++count);
        }
    }
}








